package main

// IF 接口定义
type IF interface {
	changeName()
}

type IF2 interface {
	changeName2()
}

// Human 结构定义
type Human struct {
	firstName string
}

// 结构 Human 实现接口 IF 的 changeName() 方法
func (h *Human) changeName() {
	h.firstName = h.firstName + "_changed"
}

func (h Human) changeName2() {
	h.firstName = h.firstName + "_changed"
}

func main() {

	h1 := new(Human)
	h1.firstName = "firstName1"
	println(h1.firstName) // => firstName
	// 结构在实现接口方法时，将自己的地址传给方法
	h1.changeName()
	println(h1.firstName) // => firstName_changed


	h2 := new(Human)
	h2.firstName = "firstName2"
	println(h2.firstName) // => firstName2
	// 结构在实现接口方法时，将自己的副本传给方法
	h2.changeName2()
	println(h2.firstName) // => firstName2

}
